perm filename PUB.TES[S,DOC]8 blob sn#185717 filedate 1975-11-04 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00084 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00012 00002	STANFORD ARTIFICIAL INTELLIGENCE PROJECT                   MARCH 1973
C00015 00003	SAILON-70                        PUB                           Page i
C00019 00004	Page ii                 TABLE OF CONTENTS                   SAILON-70
C00024 00005	SAILON-70                 TABLE OF CONTENTS                  Page iii
C00027 00006	SAILON-70                        PUB                           Page 1
C00030 00007	Page 2                      INTRODUCTION                    SAILON-70
C00034 00008	SAILON-70                   INTRODUCTION                       Page 3
C00038 00009	Page 4                      INTRODUCTION                    SAILON-70
C00042 00010	SAILON-70                   INTRODUCTION                       Page 5
C00046 00011	Page 6                      INTRODUCTION                    SAILON-70
C00051 00012	SAILON-70                   INTRODUCTION                       Page 7
C00055 00013	Page 8                      INTRODUCTION                    SAILON-70
C00060 00014	SAILON-70                   INTRODUCTION                       Page 9
C00061 00015	Page 10                     INTRODUCTION                    SAILON-70
C00064 00016	DAN MATION            PARACYBERNETIC PHENOMENA        January 15,1972
C00065 00017	DAN MATION            PARACYBERNETIC PHENOMENA        January 15,1972
C00068 00018	SAILON-70                        PUB                          Page 13
C00071 00019	Page 14                   TEXT CONVENTIONS                  SAILON-70
C00075 00020	SAILON-70                 TEXT CONVENTIONS                    Page 15
C00078 00021	Page 16                   TEXT CONVENTIONS                  SAILON-70
C00081 00022	SAILON-70                 TEXT CONVENTIONS                    Page 17
C00085 00023	Page 18                   TEXT CONVENTIONS                  SAILON-70
C00089 00024	SAILON-70                 TEXT CONVENTIONS                    Page 19
C00094 00025	Page 20                   TEXT CONVENTIONS                  SAILON-70
C00097 00026	 (πlus-minus)     π-
C00099 00027	SAILON-70                 TEXT CONVENTIONS                    Page 21
C00103 00028	Page 22                   TEXT CONVENTIONS                  SAILON-70
C00107 00029	SAILON-70                 TEXT CONVENTIONS                    Page 23
C00111 00030	Page 24                   TEXT CONVENTIONS                  SAILON-70
C00112 00031	SAILON-70                        PUB                          Page 25
C00115 00032	Page 26                        MACROS                       SAILON-70
C00118 00033	SAILON-70                      MACROS                         Page 27
C00122 00034	Page 28                        MACROS                       SAILON-70
C00125 00035	SAILON-70                      MACROS                         Page 29
C00127 00036	Page 30                          PUB                        SAILON-70
C00131 00037	SAILON-70                    EXPRESSIONS                      Page 31
C00135 00038	Page 32                      EXPRESSIONS                    SAILON-70
C00139 00039	SAILON-70                    EXPRESSIONS                      Page 33
C00142 00040	Page 34                      EXPRESSIONS                    SAILON-70
C00144 00041	SAILON-70                        PUB                          Page 35
C00147 00042	Page 36                      STATEMENTS                     SAILON-70
C00150 00043	SAILON-70                        PUB                          Page 37
C00153 00044	Page 38                     DECLARATIONS                    SAILON-70
C00157 00045	SAILON-70                   DECLARATIONS                      Page 39
C00160 00046	Page 40                     DECLARATIONS                    SAILON-70
C00164 00047	SAILON-70                   DECLARATIONS                      Page 41
C00168 00048	Page 42                     DECLARATIONS                    SAILON-70
C00172 00049	SAILON-70                   DECLARATIONS                      Page 43
C00176 00050	Page 44                     DECLARATIONS                    SAILON-70
C00178 00051	SAILON-70                        PUB                          Page 45
C00180 00052	Page 46                      IMPERATIVES                    SAILON-70
C00185 00053	SAILON-70                    IMPERATIVES                      Page 47
C00189 00054	Page 48                      IMPERATIVES                    SAILON-70
C00193 00055	SAILON-70                    IMPERATIVES                      Page 49
C00197 00056	Page 50                      IMPERATIVES                    SAILON-70
C00201 00057	SAILON-70                    IMPERATIVES                      Page 51
C00204 00058	Page 52                      IMPERATIVES                    SAILON-70
C00208 00059	SAILON-70                    IMPERATIVES                      Page 53
C00211 00060	Page 54                      IMPERATIVES                    SAILON-70
C00215 00061	SAILON-70                    IMPERATIVES                      Page 55
C00218 00062	Page 56                      IMPERATIVES                    SAILON-70
C00222 00063	SAILON-70                    IMPERATIVES                      Page 57
C00223 00064	Page 58                          PUB                        SAILON-70
C00226 00065	SAILON-70                        PUB                          Page 59
C00230 00066	Page 60              LABELS AND CROSS-REFERENCES            SAILON-70
C00234 00067	SAILON-70            LABELS AND CROSS-REFERENCES              Page 61
C00239 00068	Page 62              LABELS AND CROSS-REFERENCES            SAILON-70
C00241 00069	SAILON-70                        PUB                          Page 63
C00244 00070	Page 64                       RESPONSES                     SAILON-70
C00249 00071	SAILON-70                     RESPONSES                       Page 65
C00253 00072	Page 66                          PUB                        SAILON-70
C00256 00073	Page 68                          PUB                        SAILON-70
C00259 00074	SAILON-70           THOROUGHLY EXPLAINED EXAMPLES             Page 69
C00261 00075	Page 70             THOROUGHLY EXPLAINED EXAMPLES           SAILON-70
C00265 00076	SAILON-70           THOROUGHLY EXPLAINED EXAMPLES             Page 71
C00269 00077	Page 72             THOROUGHLY EXPLAINED EXAMPLES           SAILON-70
C00272 00078	SAILON-70           THOROUGHLY EXPLAINED EXAMPLES             Page 73
C00276 00079	Page 74             THOROUGHLY EXPLAINED EXAMPLES           SAILON-70
C00280 00080	SAILON-70           THOROUGHLY EXPLAINED EXAMPLES             Page 75
C00282 00081	SAILON-70                        PUB                           Page I
C00286 00082	Page II                       INDEX                         SAILON-70
C00290 00083	SAILON-70                       INDEX                        Page III
C00294 00084	Page IV                       INDEX                         SAILON-70
C00297 ENDMK
C⊗;
STANFORD ARTIFICIAL INTELLIGENCE PROJECT                   MARCH 1973
OPERATING NOTE 70




                                 PUB

                        The Document Compiler



                                 by

                            Larry Tesler






ABSTRACT:

PUB  is  an  advanced  text  justifier  and  page  formatter intended
primarily for use by programmers.  It can automatically number pages,
sections, figures,  footnotes, etc.  and can  print their  numbers in
roman numerals as well as  in digit or letter form.  It  can generate
cross references,  tables of contents,  and indexes.  Page  layout is
flexible,  and  allows  multiple  column  output.    Line  formatting
includes tabs, underlining, superscripts, subscripts,  centering, and
justification.   Macros programmed  in a  SAIL-like string-processing
language can generate text to be printed in the document.  The output
of the compiler is  a file which can  be printed on the  terminal, on
the line printer, or on microfilm.



ACKNOWLEDGMENTS:

Les  Earnest  created  the  concept  of  the  Document  Compiler  and
specified most of its capabilities.

Dan  Swinehart  provided  invaluable advice  and  aid  throughout the
development of PUB.

Russ Taylor programmed the FR-80 preprocessor.

This work  was supported  in part by  the Advanced  Research Projects
Agency of the Department of Defense under Contract SD 183.
SAILON-70                        PUB                           Page i


                          TABLE OF CONTENTS

SECTION                                                          PAGE



1        INTRODUCTION

              1.1       PURPOSE     .  .  .  .  .  .  .  .  .  .  . 1
              1.2       CAPABILITIES   .  .  .  .  .  .  .  .  .  . 1
              1.3       OPERATION   .  .  .  .  .  .  .  .  .  .  . 2
              1.4       COMPILER OUTPUT   .  .  .  .  .  .  .  .  . 4
              1.5       READING THIS MANUAL  .  .  .  .  .  .  .  . 5
              1.6       TUTORIAL FOR BEGINNERS  .  .  .  .  .  .  . 5
              1.7       SAMPLE COMPILATION   .  .  .  .  .  .  .  . 9


2        TEXT CONVENTIONS

              2.1       ILLEGAL CHARACTERS   .  .  .  .  .  .  .   13
              2.2       COMMAND AND TEXT LINES  .  .  .  .  .  .   13
              2.3       PARAGRAPHING   .  .  .  .  .  .  .  .  .   14
              2.4       FILL MODE   .  .  .  .  .  .  .  .  .  .   14
              2.5       JUSTIFICATION  .  .  .  .  .  .  .  .  .   14
              2.6       BREAKING AT BLANK LINES .  .  .  .  .  .   15
              2.7       BREAKING AT TABS  .  .  .  .  .  .  .  .   15
              2.8       BREAKING AT CARRIAGE-RETURNS  .  .  .  .   15
              2.9       NOFILL MODE .  .  .  .  .  .  .  .  .  .   15
              2.10      HORIZONTAL SPACE COMPACTION   .  .  .  .   16
              2.11      VERTICAL GROUPING .  .  .  .  .  .  .  .   17
              2.12      MODE AND SWITCH SETTING COMMANDS .  .  .   17
              2.13      WORD BREAKS .  .  .  .  .  .  .  .  .  .   18
              2.14      CONTROL FUNCTIONS .  .  .  .  .  .  .  .   18
              2.15      CONTROL CHARACTER ACTIVATION  .  .  .  .   21
              2.16      COMPUTED TEXT  .  .  .  .  .  .  .  .  .   23


3        MACROS

              3.1       CALLING A MACRO FROM A COMMAND LINE .  .   25
              3.2       CALLING A MACRO FROM A TEXT LINE .  .  .   25
              3.3       TEMPLATES   .  .  .  .  .  .  .  .  .  .   26
              3.4       MACRO DECLARATION .  .  .  .  .  .  .  .   27
              3.5       MACRO CALLS .  .  .  .  .  .  .  .  .  .   27
              3.6       OMISSIONS   .  .  .  .  .  .  .  .  .  .   28
              3.7       RECURSIVE MACROS  .  .  .  .  .  .  .  .   29
Page ii                 TABLE OF CONTENTS                   SAILON-70


4        EXPRESSIONS

              4.1       DATA TYPE   .  .  .  .  .  .  .  .  .  .   30
              4.2       VARIABLES   .  .  .  .  .  .  .  .  .  .   30
              4.3       AUTOMATICALLY DECLARED VARIABLES .  .  .   31
              4.4       SIMPLE EXPRESSIONS   .  .  .  .  .  .  .   32
              4.5       GENERAL EXPRESSIONS  .  .  .  .  .  .  .   33
              4.6       CONSTANTS   .  .  .  .  .  .  .  .  .  .   34


5        STATEMENTS

              5.1       STATEMENT TYPES   .  .  .  .  .  .  .  .   35
              5.2       BLOCK       .  .  .  .  .  .  .  .  .  .   35
              5.3       COMPOUND STATEMENT or CLUMP   .  .  .  .   35
              5.4       ONE PARAGRAPH SCOPE  .  .  .  .  .  .  .   36


6        DECLARATIONS

              6.1       SCOPE       .  .  .  .  .  .  .  .  .  .   37
              6.2       MODE DECLARATIONS .  .  .  .  .  .  .  .   37
              6.3       TABS DECLARATION  .  .  .  .  .  .  .  .   37
              6.4       INDENT DECLARATION   .  .  .  .  .  .  .   38
              6.5       PREFACE DECLARATION  .  .  .  .  .  .  .   39
              6.6       DOUBLE SPACING .  .  .  .  .  .  .  .  .   39
              6.7       AREA DECLARATION  .  .  .  .  .  .  .  .   39
              6.8       MARGIN CONTROL .  .  .  .  .  .  .  .  .   40
              6.9       PLACE DECLARATION .  .  .  .  .  .  .  .   42
              6.10      TEMPORARY AREAS   .  .  .  .  .  .  .  .   42
              6.11      COUNTER DECLARATION  .  .  .  .  .  .  .   43


7        IMPERATIVES

              7.1       ASSIGNMENT STATEMENT .  .  .  .  .  .  .   45
              7.2       CONDITIONAL STATEMENT   .  .  .  .  .  .   45
              7.3       NEXT COUNTER VALUE STATEMENT  .  .  .  .   45
              7.4       NEXT PAGE STATEMENT  .  .  .  .  .  .  .   47
              7.5       HEADINGS AND FOOTINGS   .  .  .  .  .  .   48
              7.6       SECTIONING  .  .  .  .  .  .  .  .  .  .   48
              7.7       COMMAND CHARACTER STATEMENT   .  .  .  .   49
              7.8       PORTION DEMARCATION  .  .  .  .  .  .  .   49
              7.9       SEND STATEMENT .  .  .  .  .  .  .  .  .   50
              7.10      RECEIVE STATEMENT .  .  .  .  .  .  .  .   52
              7.11      REQUIRE STATEMENT .  .  .  .  .  .  .  .   53
              7.12      SKIP STATEMENTS   .  .  .  .  .  .  .  .   53
              7.13      PAGE FRAME STATEMENT .  .  .  .  .  .  .   55
SAILON-70                 TABLE OF CONTENTS                  Page iii


              7.14      BREAK STATEMENT   .  .  .  .  .  .  .  .   55
              7.15      CONTINUE STATEMENT   .  .  .  .  .  .  .   55
              7.16      DEVICE STATEMENT  .  .  .  .  .  .  .  .   55
              7.17      UNIMPLEMENTED STATEMENTS   .  .  .  .  .   56


8        COMMENTS



9        LABELS AND CROSS-REFERENCES

              9.1       CROSS-REFERENCES  .  .  .  .  .  .  .  .   59
              9.2       LABELS      .  .  .  .  .  .  .  .  .  .   60


10       RESPONSES

              10.1      TEXT RESPONSES .  .  .  .  .  .  .  .  .   63
              10.2      TRANSITION RESPONSES .  .  .  .  .  .  .   64


11       FOOTNOTES




                             APPENDICES
                             ----------


A        THOROUGHLY EXPLAINED EXAMPLES

              A.1       SECTIONING MACROS .  .  .  .  .  .  .  .   68
              A.2       SAMPLE TABLE OF CONTENTS   .  .  .  .  .   69
              A.3       ONE-LEVEL INDEXES .  .  .  .  .  .  .  .   70
              A.4       TWO-LEVEL INDEXES .  .  .  .  .  .  .  .   72
              A.5       KWIC INDEXES   .  .  .  .  .  .  .  .  .   74


         SUBJECT AND COMMAND INDEX  .  .  .  .  .  .  .  .  .  .    I
SAILON-70                        PUB                           Page 1


                              SECTION 1

                            INTRODUCTION




1.1 PURPOSE


               PUB is a compiler which translates a manuscript into a
               document.

               A "manuscript" is an SOS file containing the text of a
               publication interspersed  with control  characters and
               commands.  The function of the compiler is  to arrange
               this text  on formatted pages  under the  direction of
               the control characters and commands.

               Output  is  written  on a  ".DOC"  file  known  as the
               "document".  TYPE, SPOOL  or PRINT it.   Under certain
               conditions, the document can be edited with  TECO (see
               Section 7.16), but it is wiser to make  corrections in
               the manuscript and then rerun the compiler.

MANUSCRIPT →→→→→→→→ DOCUMENT
           COMPILER



1.2 CAPABILITIES


               PUB provides the usual capabilities of a  simple text-
               justifier, including:

>Page numbering
>Optional justification to the right margin
>Centering of titles
>Headings and footings
>Control of Spacing and Indentation
>Underlining

               In  addition,   it  features   advanced  documentation
               capabilities, such as:




                              1.1 - 1.2
Page 2                      INTRODUCTION                    SAILON-70


>Columnar output
>Footnote placement
>Macros
>Index Generation
>Table of contents generation
>Cross-reference to a variable target
>Automatic numbering of equations, tables, notes, etc
>Superscripts and Subscripts
>Microfilm Output

               The  command  language  is a  dialect  of  SAIL Algol,
               providing the user with:

>Block structure
>Conditional command execution
>Conditional text inclusion
>Arithmetic a  in SOS format, then the  <line no.> is
               always  five  digits,  including  leading   zeroes  if
               necessary.  If it is from a TECO or TVEDIT  file, then
               PUB  generates  line  numbers  1, 2, 3,  etc.  without
               leading zeroes.  If it is from a ".PUG" file, then the
               <line no.>  is  the  line  number/ page  number  of  a
               relevant  line in  your  manuscript or  in  some other
               source file.

               If a  macro was  being expanded,  the line  number and


                                 1.4
SAILON-70                   INTRODUCTION                       Page 5


               page number of its definition are noted  within square
               brackets.  The file  that contained the  definition is
               not noted, so if can't find it in your  manuscript, it
               probably came from PUBSTD.DFS, the PUB  standard macro
               file, or from one  of your REQUIRE files  (see Section
               7.11).

               Examples:

02300/10 Manuscript file, page 10, line 2300 (SOS)
IND02300/10/1 INDEX.PUG file, page 1, comes from Manuscript 2300/10
PUB25/1  PUB Standard Macro File, Page 1, Line 25 (TVEDIT)



1.5 READING THIS MANUAL


               This manual is ordered  such that as soon as  you have
               learned enough of the system to solve  your particular
               problem, you can skip the rest of the manual.  Read at
               least  through  Section  2.3  before  making  any such
               assumption.

               In  describing  the   syntax  of  PUB   commands,  the
               following meta-linguistic symbolism is employed:

      <...>        These  brackets delimit  the name  of  a syntactic
               entity
      [...]        These delimit optional components of the command
    ...|...        This character separates alternatives for the same
               command component

               Cross-references  in  this  document  are   always  to
               subsections.   Subsection numbers  are printed  at the
               bottom of each page.



1.6 TUTORIAL FOR BEGINNERS


               PUB is a  string processing language.   Characters can
               be  formed into  words, words  into lines,  lines into
               paragraphs,  paragraphs  into  columns,  columns  into
               "areas" (such as the title areas at the top and bottom
               of the page),  areas into pages, pages  into sections,


                              1.5 - 1.6
Page 6                      INTRODUCTION                    SAILON-70


               sections  into  "portions"  (such  as  the   Table  of
               Contents  or  the  Appendices),  and  portions  into a
               document.  The  methods of  bulding larger  units from
               smaller  ones are  flexible and  under control  of the
               programmer.

               The most trivial  use of PUB  is to create  a document
               that is  exactly identical  to the  manuscript, adding
               only  headings  and footings.   PUB  assumes  that the
               format of each output  page is as follows.   The first
               three lines are a Heading area of which only the first
               is usually used.   The next 48  lines (lines 4  to 51)
               are the Text area.  Line 52 is blank and line 53  is a
               Footing area.   The Footing area  is for  page numbers
               and  other reference  information, not  for footnotes.
               (Footnotes are  placed inside  the Text  area, towards
               its bottom).

               The width of each page is assumed to be 69 characters.
               It is assumed  that there is  only one column  of text
               output.  Therefore, the longest an output line  can be
               is 69 characters.

               The  number  of  lines in  each  area,  the  number of
               columns of text, and the number of characters  in each
               column  may be  changed by  declaration.   See Section
               6.7 and  Section 7.13  for details.   If all  you want
               to do is widen the page, e.g., to 75  characters, then
               make the following line the first of the manuscript:
.PAGE FRAME 53 HIGH 75 WIDE

               The "Dot" in column one indicates that this line  is a
               Command Line for PUB to obey and should not be printed
               in  the document.   If  you would  rather  a different
               character in column  one served for this  purpose, see
               Section 2.2.

               PUB assumes  that you want  no headings  and footings.
               It  will leave  the  heading and  footing  areas blank
               unless  you specify  otherwise.  The  simplest  way to
               specify  headings and  footings is  with  the standard
               macros  "EVERY  HEADING" and  "EVERY  FOOTING".  These
               macros can specify a title for the left  edge, center,
               and right  edge of  the heading  area and  the footing
               area.  For example, the macro call:
.EVERY HEADING(PRELIMINARY REPORT,PARACYBERNETIC PHENOMENA,1972)



                                 1.6
SAILON-70                   INTRODUCTION                       Page 7


               will print  on the  top line of  every page  the three
               titles shown.

               To make the top  line of every page display  the title
               "PRELIMINARY REPORT" on the left and the  current date
               on the right, use:
.EVERY HEADING(PRELIMINARY REPORT, ,{DATE})

               The  consecutive commas  indicate that  the  center is
               empty.   The  curly  brackets  around  the  word  DATE
               specify that  DATE is  not a title  to be  printed but
               rather a variable to be evaluated.

               To make the number of each page appear  bottom center,
               use:
.EVERY FOOTING(,{PAGE},)

               To learn about fancier headings and footings, you will
               have to read most of this document, especially Section
               7.5 and Section 10.2.

               PUB will  number your pages  1, 2, 3, etc.  unless you
               declare otherwise.   To learn  how, see  Section 6.11.
               A new page  of output will be  started for one  of two
               reasons: the previous page is full, or a page-changing
               command  is executed.   The most  common page-changing
               command is:
.NEXT PAGE

               This always starts  a new page,  even if one  was just
               started and nothing is on it yet.  To start a new page
               only if there is something on the current page, use:
.SKIP TO COLUMN 1

               To leave a few blank lines in the document, use:
.GROUP SKIP 10

               The SKIP command is described in Section 7.12.

               PUB processes text a  paragraph at a time.   The usual
               way  to  indicate  the  end  of  a  paragraph  in your
               manuscript is by a blank line (that is, just a  CR and
               LF).   Oher  ways  are  discussed  elsewhere  in  this
               manual, beginning at Section 2.3.

               Usually, PUB packs a paragraph as tightly  as possible
               by  filling  up  each output  line  with  words before


                                 1.6
Page 8                      INTRODUCTION                    SAILON-70


               beginning a new line.  This is called "filling".  Then
               PUB inserts extra spaces between words to  eliminate a
               ragged right edge from the paragraph.  This  is called
               "justifying".

               PUB  will  not  indent the  first  line  of paragraphs
               unless an  indent command  appears in  the manuscript,
               e.g.:
.INDENT 6

               To learn more  about indentation and  related matters,
               see Section 6.4 through Section 6.7.

               PUB assumes you would like your text lines  filled out
               and justified.  You  can selectively exempt  blocks of
               your manuscript from this fate.  Each such  block must
               be delimited by  ".BEGIN" and ".END".   After "BEGIN",
               specify a formatting mode to persist for  the duration
               of the block.  Examples:

Fill, but don't Justify    Don't even fill   Copy verbatim

.BEGIN NOJUST              .BEGIN NOFILL     .BEGIN VERBATIM
   ...                        ...               ...
.END                       .END              .END

               In  "NOJUST"  mode,  lines  will  be  filled  but  not
               justified.   In  "NOFILL" and  "VERBATIM"  modes, they
               will  not  even  be  filled.   The  difference between
               NOFILL and  VERBATIM is that  VERBATIM is  both faster
               and dumber.  It is faster because it copies  the lines
               of the manuscript  to the document without  looking at
               them, except to see if  there is a dot in  column one.
               It  is  dumber  because  it  does  not  recognize text
               control characters  that PUB normally  recognizes, and
               it does  not reformat in  any way.  Thus,  VERBATIM is
               used to  copy blocks of  manuscript that  are arlready
               formatted perfectly.

               Filling allows  the manuscript to  be quite  ragged, a
               great  convenience   in  editing.   Short   lines  are
               lengthened and long  lines are shortened.   Be careful
               in NOFILL or VERBATIM mode that no manuscript  line is
               longer than 69 characters (or whatever limit  you have
               declared), or  some of  it will be  lost and  an error
               message given.



                                 1.6
SAILON-70                   INTRODUCTION                       Page 9


1.7 SAMPLE COMPILATION


               You now  know enough to  use PUB for  simple purposes.
               The next three pages show a sample manuscript  and the
               document that PUB produced from it.











































                                 1.7
Page 10                     INTRODUCTION                    SAILON-70


.EVERY HEADING(DAN MATION,PARACYBERNETIC PHENOMENA,{DATE})
.EVERY FOOTING(,{PAGE},)
.INDENT 6
.BEGIN VERBATIM
.GROUP SKIP 20
   PARACYBERNETIC PHENOMENA


        BY DAN MATION
.END
.NEXT PAGE
It has been observed that the Sigma 3 in Horsetown, Mass. and the
CDC 6600 in Liverless, Cal. tend to have parity errors at the same
time.  When records were compared by
Miss Minnie Messer, Director of the Horsetown Chamber of Commerce
Computation Facility,
and Mr. Solomon Crunch of Liverless Hospital's Organ-Transplant
Inventory Project, it was shown that
the correlation of parity error occurrences was 0.8, with a
probability of random coincidence of <.00000001.

Miss Messer and Mr. Crunch revealed these discoveries at the
Universal Users Union meeting in Cranchville, Tenn. after they
arrived two hours late for Mr. Crunch's scheduled talk there.
They said that in the excitement of discovery
the meeting slipped their minds.

This report has motivated this author to undertake
a wider survey to determine if similar
phenomena have occurred elsewhere.  The author has
solicited Miss Messer's assistance in this survey,
but without the cooperation of the entire computing community,
it is unlikely that sufficient
data
can be collected.  Therefore, we request that interested
parties tabulate the exact times of occurrence of parity
errors on their computer during the 7 day period
1200 April 18 to 1200 April 25 and send it to:
.BEGIN NOFILL

 Paracybernetic Society
 c/o Dan Mation
 Boise Institute of Technology
 Boise, Idaho
.END
Results of the study will be presented at the next UUU meeting
in December.
DAN MATION            PARACYBERNETIC PHENOMENA        January 15,1972






















   PARACYBERNETIC PHENOMENA


        BY DAN MATION

























                                  1
DAN MATION            PARACYBERNETIC PHENOMENA        January 15,1972


      It has been observed that  the Sigma 3 in Horsetown,  Mass. and
the CDC  6600 in Liverless,  Cal. tend to  have parity errors  at the
same  time.   When  records  were  compared  by  Miss  Minnie Messer,
Director of the  Horsetown Chamber of Commerce  Computation Facility,
and  Mr.  Solomon  Crunch  of  Liverless  Hospital's Organ-Transplant
Inventory Project, it was shown that the correlation of  parity error
occurrences  was 0.8,  with a  probability of  random  coincidence of
<.00000001.

      Miss Messer  and Mr. Crunch  revealed these discoveries  at the
Universal  Users  Union  meeting  in  Cranchville,  Tenn.  after they
arrived two hours late  for Mr. Crunch's scheduled talk  there.  They
said that in  the excitement of  discovery the meeting  slipped their
minds.

      This  report has  motivated this  author to  undertake  a wider
survey  to determine  if similar  phenomena have  occurred elsewhere.
The author has solicited Miss Messer's assistance in this survey, but
without  the cooperation  of the  entire computing  community,  it is
unlikely  that  sufficient  data  can  be  collected.   Therefore, we
request  that  interested   parties  tabulate  the  exact   times  of
occurrence of parity errors on their computer during the 7 day period
1200 April 18 to 1200 April 25 and send it to:

       Paracybernetic Society
       c/o Dan Mation
       Boise Institute of Technology
       Boise, Idaho

      Results of the study will be presented at the next  UUU meeting
in December.


















                                  2
SAILON-70                        PUB                          Page 13


                              SECTION 2

                          TEXT CONVENTIONS




2.1 ILLEGAL CHARACTERS


               If the following  characters occur in  the manuscript,
               they may cause problems:

       '177        Rubout
       '175        Altmode
        '13        Vertical Tab

               These characters are ignored in the manuscript:

         '0        Null
        '14        Form Feed  (except after  LF, where  it is  a page
               mark)

               A  manuscript   prepared  using   SOS  or   TVEDIT  is
               legitimate  if  it has  no  vertical tabs.   If  it is
               prepared using TECO, be  sure as well that  every line
               ends with CR LF.

               Tabs are expanded to the appropriate number of spaces,
               as in the line editor.



2.2 COMMAND AND TEXT LINES


               Every line with a  dot (".") in column 1  is processed
               as a command line.  Every other line is processed as a
               text line.

               If you would prefer a different character to introduce
               command lines, e.g., $, use the command:
COMMAND CHARACTER "$" ;






                              2.1 - 2.2
Page 14                   TEXT CONVENTIONS                  SAILON-70


2.3 PARAGRAPHING


               The  text  is   processed  in  logical   units  called
               "paragraphs".   A  paragraph  is  the  accumulation of
               words from one or  more text lines, terminated  by the
               occurrence of a paragraph break.

               A paragraph break can  be caused by the  command BREAK
               as well as by several other commands.  In  addition, a
               paragraph break can be caused by signals in the text.

               Paragraphing conventions can  be varied by the  use of
               various mode and switch settings.



2.4 FILL MODE


               In FILL mode, the  compiler puts as many words  as can
               fit on each output line before beginning a new line --
               each line is "filled" with words.

               For convenience of  exposition, names have  been given
               to the  parts of  the output  paragraph in  FILL mode.
               The first line  is called the  crown, and the  rest of
               the lines are called the vest.  It is common to indent
               the  crown and  not  the vest,  or vice  versa,  or to
               indent them different  amounts.  The last line  of the
               vest is called the hem.  While the other lines  of the
               paragraph  can be  subject to  justification,  the hem
               line is never justified.



2.5 JUSTIFICATION


               In FILL mode, whether or not output lines are
               justified to the right margin is determined by the
               setting of the "ADJUST-NOJUST" switch; but the hem
               line is never justified in any case.






                              2.3 - 2.5
SAILON-70                 TEXT CONVENTIONS                    Page 15


2.6 BREAKING AT BLANK LINES


               In FILL mode,  a BREAK is  caused by every  blank line
               (just CR-LF).  Redundant  blank lines have  no effect.
               To disable this response, see Section 10.1.



2.7 BREAKING AT TABS


               Tabs are converted to an appropriate number  of spaces
               by  PUB.   If  you  would like  a  single  tab  at the
               beginning of a text  line to cause a  paragraph break,
               put this command at the beginning of your manuscript:
.TABBREAK

               This  makes text  lines  that are  indented  exactly 8
               spaces  cause  a  break.   Since  an  initial  TAB  is
               converted  to  8  spaces,  it  will  also  break.  The
               inverse of TABBREAK is TABSPACE.



2.8 BREAKING AT CARRIAGE-RETURNS


               In  FILL mode,  PUB usually  converts  every carriage-
               return at the end of a text line to a space.  If it is
               at the  end of a  sentence, it converts  the carriage-
               return to two spaces.  If you would rather  that every
               carriage-return ending a text line caused  a paragraph
               break, use this command:
.CRBREAK

               The inverse of CRBREAK is CRSPACE.



2.9 NOFILL MODE


               In  NOFILL mode,  one input  line produces  one output
               line, even if it falls far short of the  right margin;
               if  the line  is too  long, characters  will  be lost.
               Every  carriage-return ending  a text  line  in NOFILL


                              2.6 - 2.9
Page 16                   TEXT CONVENTIONS                  SAILON-70


               mode causes a  paragraph break.  The  commands ADJUST,
               CRSPACE, and TABBREAK do not affect this mode.

               NOFILL  mode  has  several  variations,  which  differ
               mainly in the final treatment of the output line:

               NOFILL: (Standard variation) No special treatment.

         CENTER: Center the output line between the margins.

                      FLUSH RIGHT: Shove it against the right margin.

FLUSH LEFT: Shove it against the left margin.

JUSTJUST:    Justify    it    by    the    insertion    of    spaces.

VERBATIM: Copy text lines to output exactly as written,
   without changing
   indentations.  Ignore all control characters {α↑[#]&↓β\∂-∞←→.
     Dot in column 1   still signals a command line.
 This mode speeds text processing
     when no formatting is needed.

               SUPERIMPOSE  [n]:  Suppress the  LF  after  each line,
               except every n'th line.
< ↑ < ! ≡ ∩ ⊂ ~ % 7 Z
| ↓ > ? / ∪ ⊃ . \ - -
abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ



2.10 HORIZONTAL SPACE COMPACTION


               In COMPACT  mode, redundant spaces  in the  input line
               are discarded.        In      RETAIN  mode,       they
               are           retained.

               More precisely, in COMPACT mode, a sequence of  two or
               more spaces is reduced to one space, except at the end
               of a sentence, where it is only reduced to two spaces,
               and at the beginning of a text line, where  all spaces
               are discarded.  Of  course, spaces may  be re-inserted
               during justification.






                                2.10
SAILON-70                 TEXT CONVENTIONS                    Page 17


2.11 VERTICAL GROUPING


               In GROUP mode, all  output lines are forced  to appear
               in an unbroken column.  Its inverse is APART mode.  If
               the bottom of the output page is encountered  while in
               GROUP mode, the whole group is moved to the top of the
               next column or page.

               It is  unwise to use  GROUP mode for  more than  a few
               lines  that  must  appear  undivided  in  the  output.
               Example:

.GROUP
EQUATION 6
  m = vt
.APART
               This would prevent "Equation 6" from appearing  at the
               bottom  of one  page and  "m = vt" at  the top  of the
               next.



2.12 MODE AND SWITCH SETTING COMMANDS


               The  commands that  select the  paragraphing  mode are
               FILL,  NOFILL,   CENTER,  FLUSH  RIGHT,   FLUSH  LEFT,
               JUSTJUST,  VERBATIM,  and  SUPERIMPOSE  [n],  where  n
               [optional] is any "SAIL" expression.

               The  commands  ADJUST  and  NOJUST  set  the FILL-mode
               justification  switch.   TABBREAK,  TABSPACE, CRBREAK,
               and CRSPACE control  the reaction to initial  tabs and
               to carriage-returns in FILL mode.

               The  commands  RETAIN  and  COMPACT,  GROUP  and APART
               select the space compaction and column grouping modes.

               At the  outset of compilation,  the settings  in force
               are:
.FILL    ADJUST    TABSPACE  CRSPACE   RETAIN    APART

               WARNING:  Switching  to  NOFILL  or  to  any   of  its
               variations  automatically  switches  to  RETAIN  mode.
               This  can be  overridden by  following the  command by
               COMPACT.


                             2.11 - 2.12
Page 18                   TEXT CONVENTIONS                  SAILON-70


2.13 WORD BREAKS


               The compiler  processes the  input paragraph  in units
               called  words.   A  "word"  is  roughly  defined  as a
               sequence  of  consecutive  visible  characters.   More
               precisely, the compiler concatenates characters into a
               word until the occurrence of a word break.

               A  word  break is  normally  signalled by  any  of the
               following in a text line:

>A space (or a sequence of spaces)
>A carriage-return (the end of an input line)
>The control character β, if activated (as well as some others)

               Word breaks serve two functions.

               (1) FILLING:  In generating  an output  paragraph, the
               compiler puts as  many words as  can fit on  each line
               before beginning a new line.  The paragraph  will only
               be divided for this purpose at word breaks.

               (2) JUSTIFYING:  During  justification,  extra  spaces
               will only be inserted at word breaks.



2.14 CONTROL FUNCTIONS


               Several control  functions can  be invoked  by control
               characters in the text line.  The user can  choose the
               characters he  wishes to  serve these  functions.  For
               simplicity  of exposition,  a suggested  character has
               been designated for each function.

               The following control functions are available.  If the
               description  states: "BLA  mode only",  then  in other
               modes, the character is treated no differently than an
               alphanumeric.

          β        Cause a word βreak.

          α        Pretend the  next character is  αlphanumeric (this
               lets you slip in control characters);

          #        Same as α<space>; sneaks spaces into words.

                             2.13 - 2.14
SAILON-70                 TEXT CONVENTIONS                    Page 19


          . ! ?    FILL mode  only, and  only at the  end of  a word:
               marks the end of a sentence. This means:

                   (1) If followed by two or more  spaces, COMPACTion
               only reduces the spaces to two instead of one.
                   (2) If followed by a carriage-return, replaces the
               CR by two spaces instead of one.

          -        FILL mode only, and  not the first character  of a
               word: a hyphen.  This means:

                   (1) If at  the end  of a  line, prevents  the word
               break that usually occurs there.
                   (2) Otherwise, permits the word to be broken after
               the hyphen in case it overfills the output line.

          \        TAB.  Insert spaces up to the next tab stop set by
               the TABS command (see Section 6.3).

          ∂+n      MOVE RIGHT.  Leave n spaces in the output line.

          ∂-n      MOVE  LEFT   n characters.  Create  new characters
               (these due to Jerry Agin): ~ ~ O O ~
                                          > ( - | V.
                                           

          ∂n       TAB.  Insert  spaces up to  but not  including the
               n'th character  position from  the left  margin (flush
               left is n=1).   Both kinds of  TAB (\ and  ∂n) inhibit
               insertion of all justification spaces to their left.

                   For ∂n  and  ∂+n, n  may be any  "SAIL" expression
               enclosed  in parentheses.   In  the case  of  a single
               letter variable or a one-digit number, the parentheses
               may  be omitted.   RESTRICTION...  ∂(<expression>) may
               not appear as the last thing on a text line.

          →        Right Flush.   If a  \ or ∂n  occurs later  in the
               line, slide  the text that  is between here  and there
               flush  against  the  column  designated  by  the  tab.
               Otherwise,    slide the rest of this paragraph against
                          the right margin, inhibiting justification.

          ←        Center.  If a  \ or ∂n  occurs later in  the line,
               center the text that is between here and there halfway
               between the current  column and the  column designated
               by  the  tab.  Otherwise,  center  the  following text
               between the margins, inhibiting justification.



                                2.14
Page 20                   TEXT CONVENTIONS                  SAILON-70


          ∞x       Repeat.  `x' is  any character. If ∞x  precedes \,
               ∂+, ∂n, →, or ←,  then use the character x  instead of
               spaces  as filler  to the  left of  the  affected text
               (i.e., ∞.\ puts ..... up to the tab column).

          ∞x∞y∞z...Use the repeating string xyzxyz... as filler.

          ↓_..._↓  Underline.   In the  text between  brackets, every
               visible character is underlined. " " is only a control
               character when  paired with "↓".   If you  want spaces
               underlined    as    well    in    a    title,   simply
               replace each space by an underbar.

          ∪        ∪nderline   one   word.    The    following   word
               (consisting of letters and digits only) is underlined.

          π        πrint a wierd character.  The line printer and FR-
               80 have these but your terminal doesn't.
                                   To get.............Write
                                    (center dot)     π.
                                   	 (gamma)          πG or πg
                                   
 (apple delta)    π∂
                                    (integral)       π~ (tilde)
                                   
 (πlus-minus)     π-
                                   
 (circle plus)    π+

          {        Switch to Command  Processing.  To return  to text
               processing, use }.  See Section 2.16.

          ↓x       Subscript.  The text x is                (an extra
                                             lowered a line
               line  is  reserved  for  it).   x  may  be  any single
               character except "[" or  " ", or may be a  sequence of
               characters bracketed between [...] .  A subscript must
               appear all on one line.

          ↑x       Superscript.  Analogous to Subscript, except x may
               also  be  the  single  character  " ".   Collectively,
               superscripts
                            and            are called somescripts.
                                subscripts

                   These may  combine and  nest in  interesting ways.
               Super/subscripts may not nest more deeply than 4.

          x&y      Align.  "&" is only considered a control character
               if it is the first character following a somescript x.


                                2.14
SAILON-70                 TEXT CONVENTIONS                    Page 21


               Its effect  is to align  the leftmost characters  of x
               and  y  by  backspacing after  printing  x  and before
               printing y, and  to align the rightmost  characters by
               forward spacing to  the end of the  longer of x  and y
               when  done.  x  must be  a somescript.   y may  be any
               single character  except "[", "↑",  or "↓", or  may be
               another  somescript,  or   may  be  any   sequence  of
               characters enclosed between [...] .  Examples:

To get...Write     To get....Write

 j                 _ 2
x        x↑j&↓i    y         ↑ &y↓[i+j]&↑[ 2]
 i                  i+j

  2
x        x↓i↑2     SUM       ↓[ t]&[SUM]
 i                  t

                    i2
∃        ↓x&∃      x         x↑i↑2
x

                     2
.                   i
t        ↑.&t      x         x↑[i↑2]



2.15 CONTROL CHARACTER ACTIVATION


               At  the  outset  of  compilation,  the   only  control
               characters  recognized are  the punctuators  ".", "!",
               and "?"  when they appear  at the end  of a  word, and
               hyphen ("-") when it appears in the middle of  a word.
               NOTE: Not even  "{" is recognized unless  you activate
               it.  However, "}" is permanently active, because it is
               not  a text  control  character but  really  a command
               langauge delimiter.

               To turn  on any control  function using  its suggested
               character ("α" for example), use the command:
.TURN ON "α"

               To  activate the  control function  using  a different
               character, such as "%" or "β", write:


                                2.15
Page 22                   TEXT CONVENTIONS                  SAILON-70


.TURN ON "%" FOR "α"
.TURN ON "β" FOR "α"
               To  de-activate a  control character,  such as  "?" or
               "%", use:

.TURN OFF "?"
.TURN OFF "%"

               One TURN command  may have several  operands separated
               by commas:
.TURN ON "%" FOR "α", "@" FOR "←", "→", "\"
.TURN ON "↑", "↓", "[", "]", "_", "&"

               The latter may be abbreviated:
.TURN ON "↑↓[]_&"

               There  is a  subtle problem  that arises  when control
               characters have been turned on inside a macro  and the
               macro wants to turn off only the ones that  weren't on
               previously.   If  it  has  done  a   TURN ON "↑",  for
               example,  it can  not undo  it with  TURN OFF "↑", for
               that would  always TURN it OFF  whether or not  it was
               originally on.   There are  two ways  to do  it right.
               One is to use  block structure (see Section  5.2), but
               sometimes  this  is impossible,  because  blocks cause
               paragraph breaks.  The other way is to use the command
               TURN ON|OFF  without  arguments.   Its  effect  is  to
               cancel  the previous  TURN ON|OFF that  had arguments,
               was  in  the  current  block,  and  has  not  yet been
               cancelled.

               For purposes of smooth exposition, in the rest of this
               manual it is assumed  that you have turned on  all the
               control   functions   and  used   all   the  suggested
               characters for them.  Remember, though, that  only the
               punctuators   are   turned  on   unless   you  command
               otherwise!

               It  is  recommended   that  you  don't  turn   on  any
               characters  except  in  short  blocks  where  you know
               you'll remember they're  on.  Ideal places  are inside
               macro bodies (See Section 3.1).







                                2.15
SAILON-70                 TEXT CONVENTIONS                    Page 23


2.16 COMPUTED TEXT


               The  control  character  "{"  will  switch  to command
               processing right in the  middle of a text  line.  This
               allows the execution of any PUB commands without first
               causing either a paragraph break or a word  break.  If
               you want a word break before the {, force it  by means
               of a β or a space.

               The command  most commonly executed  after "{"  is the
               Computed Text Command.   A variable, a constant,  or a
               parenthesized  expression  occurring  in  isolation is
               evaluated and its string value is then scanned  by the
               text scanner as text.  Example:

A = {A}, and B = ↓ {(2+2)} ↓.

               If  the value  of A  was the  string "∪3",  this would
               output:

A = 3, and B = 4.

               Caution: If  a {...} construct  extends onto  a second
               input  line, be  sure to  begin the  continuation line
               with a "." -- or you won't be in the command scanner!

               Caution: A string constant following the word BEGIN is
               considered a block name, as in SAIL, and  not computed
               text.  If you  put computed text after  BEGIN, precede
               it by a semicolon.

               Note that a "}" (which  can not be TURNed ON  and OFF)
               switches to text processing from command processing at
               any time.   This allows  a Short Text  Line to  be put
               right into a command line:
.NOFILL }I am a short text line.{BREAK FILL

               which is the compact equivalent of:

.NOFILL
I am a short text line.
.FILL

               To  summarize,  there  are  two  ways  to  switch from
               command to text processing:



                                2.16
Page 24                   TEXT CONVENTIONS                  SAILON-70


>New line without "." in column 1
>}
               and two ways to switch from text processing to command
               processing:

>New line with "." in column 1
>{










































                                2.16
SAILON-70                        PUB                          Page 25


                              SECTION 3

                               MACROS




3.1 CALLING A MACRO FROM A COMMAND LINE


               It  is  common  to  repeat  an  identical  sequence of
               commands many times in a manuscript, e.g.,
.FILL ADJUST COMPACT TURN ON "∂{αβ"

               You could define the following macro:
.MACRO FAC ⊂ FILL ADJUST COMPACT TURN ON "∂{αβ" ⊃

               and  then  whenever   you  want  the   whole  sequence
               executed, write simply:
.FAC

               The  body of  the macro  enclosed between  ⊂ and  ⊃ is
               substituted  for  its  name and  then  scanned  by the
               command scanner.

               A macro may also have arguments:
.MACRO T(CHR) ⊂ NOFILL TURN ON "CHR" ⊃

               which when called by:
.T(α)

               expands to:
. NOFILL TURN ON "α"



3.2 CALLING A MACRO FROM A TEXT LINE


               It is  also common  to repeat  an awkward  sequence of
               control characters many times in the manuscript, e.g.,
X↑i&↓[j,k]

               You could define the following macro:
.MACRO XIJK ⊂"X↑i&↓[j,k]"⊃

               but to call it you must get to the command scanner:
{XIJK}

                              3.1 - 3.2
Page 26                        MACROS                       SAILON-70


               When  the  body  is  substituted  for  the  name, this
               becomes a string constant inside curly brackets:
{"X↑i&↓[j,k]"}

               so it  is considered computed  text and is  scanned by
               the text scanner, producing the output:

 i
X
 j,k

               Again, parameters can be used:
.MACRO S(X,I,J,K) ⊂"X↑i&↓[j,k]"⊃

               If called by {X(i,j,k)} this would expand to  the same
               as above, but called by
{S(Y,t,t1,URG)}

               it would expand to "Y↑t&↓[t1,URG]" which would output:
 t
Y
 t1,URG

               Some macros are  declared for you in  an automatically
               loaded  file  PUBSTD.DFS  (see  Section  7.5).   Other
               useful macros are  declared in a file  PUBMAC.DFS that
               you can REQUIRE (see Section 7.11) to be  loaded; they
               are described in PUBMAC.TES[UP,DOC].



3.3 TEMPLATES


               A  "template" occurs  as a  part of  several commands,
               including  the  macro declaration,  and  requires some
               explanation.  Its purpose is to store away a  piece of
               program for later, instead of immediate, execution.
 Syntax:
⊂ <piece of program> ⊃

               The <piece  of program>  may include  other templates,
               and may  span sever